Spring Cloud Hystrix হল একটি circuit breaker প্যাটার্নের ইমপ্লিমেন্টেশন, যা মাইক্রোসার্ভিস আর্কিটেকচারে সার্ভিসগুলির ব্যর্থতা মোকাবিলা এবং সিস্টেমের স্থিতিশীলতা নিশ্চিত করার জন্য ব্যবহৃত হয়। এটি Netflix Hystrix লাইব্রেরি দ্বারা প্রণীত এবং Spring Cloud এর অংশ হিসেবে ব্যবহৃত হয়।
Circuit Breaker প্যাটার্নটি এমন একটি ডিজাইন প্যাটার্ন যা সার্ভিসের মধ্যে অতিরিক্ত চাপ এড়াতে এবং সিস্টেমের স্থিতিশীলতা নিশ্চিত করতে সাহায্য করে। যখন একটি সার্ভিস ব্যর্থ হতে থাকে বা সিস্টেমে অতিরিক্ত লোড আসে, তখন সার্কিট ব্রেকার নিজে থেকেই সমস্যাযুক্ত সার্ভিসে রিকোয়েস্ট পাঠানো বন্ধ করে দেয় এবং সিস্টেমের অন্যান্য অংশকে অক্ষুণ্ণ রাখে।
Circuit Breaker প্যাটার্নের কাজের প্রক্রিয়া
Circuit Breaker প্যাটার্নটি তিনটি প্রধান স্টেটের মধ্যে কাজ করে:
- Closed State (নরমাল অবস্থা):
সার্ভিস সাধারণত কাজ করছে এবং সার্ভিস থেকে রিকোয়েস্ট সফলভাবে আসছে। সার্ভিসের মাধ্যমে রিকোয়েস্ট পাঠানো হয়। - Open State (ব্যর্থতার অবস্থা):
সার্ভিসের মধ্যে বার বার ব্যর্থতা ঘটলে, সার্কিট ব্রেকার "Open" স্টেটে চলে যায় এবং সার্ভিসে রিকোয়েস্ট পাঠানো বন্ধ করে দেয়। এতে সিস্টেমের অন্যান্য অংশগুলো ঠিকভাবে কাজ করতে থাকে এবং অতিরিক্ত চাপের ঝুঁকি কমে যায়। - Half-Open State (অস্থায়ী অবস্থা):
কিছু নির্দিষ্ট সময় পর, সার্কিট ব্রেকার "Half-Open" স্টেটে চলে আসে, যেখানে কিছু রিকোয়েস্ট পাঠানো হয় সার্ভিসে। যদি সার্ভিস আবারও ব্যর্থ হয়, সার্কিট ব্রেকার আবার "Open" স্টেটে চলে যাবে, অন্যথায় এটি "Closed" স্টেটে ফিরে যাবে।
Spring Cloud Hystrix এর কাজ
Spring Cloud Hystrix মূলত সার্ভিসের ফেইলিওভার (failover) এবং ব্যর্থতা সুরক্ষা নিশ্চিত করার জন্য ব্যবহার করা হয়। এটি রিভিউ, রিসিলিয়েন্স এবং অ্যাপ্লিকেশনের স্থিতিশীলতা বাড়াতে সাহায্য করে। Hystrix সার্কিট ব্রেকার হিসেবে কাজ করে যা নিচের প্রক্রিয়ায় কাজ করে:
- ব্যর্থতার মোকাবিলা:
সার্ভিস যখন সঠিকভাবে কাজ করে না বা বেশি লোডে থাকে, তখন Hystrix সার্ভিস কল বন্ধ করে দেয় এবং ব্যর্থতার রেসপন্সকে হ্যান্ডল করে। - ডিফল্ট রেসপন্স প্রদান:
সার্ভিস কল ব্যর্থ হলে, Hystrix ডিফল্ট বা ব্যাকআপ রেসপন্স ফেরত দেয়, যাতে সিস্টেমের বাকি অংশ ক্ষতিগ্রস্ত না হয়। - অ্যাসিঙ্ক্রোনাস অপারেশন:
Hystrix অ্যাসিঙ্ক্রোনাসভাবে অপারেশন পরিচালনা করতে সহায়ক, যার মাধ্যমে সার্ভিসের ব্যর্থতা অল্প সময়ে শনাক্ত করা সম্ভব।
Spring Cloud Hystrix কনফিগারেশন
1. Hystrix Dependency Configuration
Spring Cloud Hystrix ব্যবহার করতে প্রথমে প্রয়োজনীয় ডিপেন্ডেন্সি যুক্ত করতে হবে:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
2. Enable Hystrix in Spring Boot Application
Hystrix সক্ষম করতে আপনার Spring Boot অ্যাপ্লিকেশনে @EnableCircuitBreaker অ্যানোটেশন ব্যবহার করতে হবে।
@SpringBootApplication
@EnableCircuitBreaker // Enable Hystrix Circuit Breaker
public class HystrixApplication {
public static void main(String[] args) {
SpringApplication.run(HystrixApplication.class, args);
}
}
Hystrix Command
Hystrix ব্যবহার করার জন্য, আপনাকে Hystrix কমান্ড তৈরি করতে হবে, যা সার্ভিস কলের জন্য Circuit Breaker যোগ করবে। সাধারণভাবে, এটি একটি @HystrixCommand অ্যানোটেশন ব্যবহার করে করা হয়।
3. Example: Hystrix Command Implementation
import com.netflix.hystrix.HystrixCommand;
import com.netflix.hystrix.HystrixCommandGroupKey;
import org.springframework.stereotype.Service;
@Service
public class HystrixService {
public String callService() {
// Normal service call
return new MyServiceCommand().execute();
}
// Hystrix Command to call a service
private class MyServiceCommand extends HystrixCommand<String> {
protected MyServiceCommand() {
super(HystrixCommandGroupKey.Factory.asKey("MyServiceGroup"));
}
@Override
protected String run() throws Exception {
// Simulate a service call (could be a REST API call, database query etc.)
Thread.sleep(3000); // Simulate delay
return "Service Response"; // Return service response
}
@Override
protected String getFallback() {
// This method is called if the service call fails (Circuit Breaker is Open)
return "Fallback Response"; // Return default response
}
}
}
run(): এটি মূল সার্ভিস কল যা আপনাকে করতে হবে (এখানে একটি সিমুলেটেড সার্ভিস কল করা হয়েছে)।getFallback(): এটি ব্যর্থ হলে ডিফল্ট রেসপন্স প্রদান করবে।
4. Hystrix Dashboard
Hystrix Dashboard ব্যবহার করে আপনি সার্ভিসের সিস্টেম স্ট্যাটাস এবং সার্কিট ব্রেকারের অবস্থা ট্র্যাক করতে পারেন। একটি @EnableHystrixDashboard অ্যানোটেশন ব্যবহার করে এটি ইনস্টল করা যেতে পারে।
@SpringBootApplication
@EnableHystrixDashboard // Enable Hystrix Dashboard
public class HystrixDashboardApplication {
public static void main(String[] args) {
SpringApplication.run(HystrixDashboardApplication.class, args);
}
}
Dashboard সাধারণত http://localhost:8080/hystrix URL এ অ্যাক্সেস করা যায়।
Hystrix Configuration Properties
Execution Timeout:
এই প্রপার্টি সার্ভিস কলের জন্য টাইমআউট নির্ধারণ করে।hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=5000Circuit Breaker Threshold:
এটি সার্ভিসের জন্য সফল ও ব্যর্থ রেসপন্সের নির্দিষ্ট সীমা নির্ধারণ করে।hystrix.command.default.circuitBreaker.requestVolumeThreshold=20 hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds=5000Fallback:
যদি সার্ভিস কল ব্যর্থ হয়, তাহলে কীভাবে fallback রেসপন্স ফিরিয়ে দেওয়া হবে, সেটি কনফিগার করা যায়।hystrix.command.default.fallback.isolation.thread.timeoutInMilliseconds=3000
Spring Cloud Hystrix এর সুবিধা
- ব্যর্থতা সুরক্ষা:
সার্ভিসগুলির মধ্যে অতিরিক্ত চাপ এড়াতে এবং সিস্টেমের স্থিতিশীলতা বজায় রাখতে সাহায্য করে। - ডিফল্ট রেসপন্স প্রদান:
সার্ভিস ব্যর্থ হলে ব্যবহারকারীকে ডিফল্ট রেসপন্স প্রদান করা যায়, যাতে সিস্টেমের অন্যান্য অংশ ক্ষতিগ্রস্ত না হয়। - ডায়নামিক সার্ভিস রিকভারি:
সার্কিট ব্রেকার এর Half-Open স্টেট দ্বারা সিস্টেমকে পুনরায় পরীক্ষা করে এবং স্বয়ংক্রিয়ভাবে সার্ভিস পুনরুদ্ধার করা যায়। - রিঅ্যাকটিভ প্রোগ্রামিং:
Hystrix অ্যাসিঙ্ক্রোনাস এবং নন-ব্লকিং সার্ভিস কল করার জন্য সহায়ক, যা অ্যাপ্লিকেশনকে আরও দ্রুত এবং কার্যকরী করে।
উপসংহার
Spring Cloud Hystrix সার্কিট ব্রেকার প্যাটার্ন ইমপ্লিমেন্ট করে সার্ভিসের ব্যর্থতা থেকে সিস্টেমকে রক্ষা করতে সাহায্য করে এবং সার্ভিসের স্থিতিশীলতা নিশ্চিত করে। এটি মাইক্রোসার্ভিস আর্কিটেকচারে একটি গুরুত্বপূর্ণ টুল যা অ্যাপ্লিকেশনগুলোকে আরও রেজিলিয়েন্ট ও স্কেলেবল করে তোলে। Hystrix ব্যবহারের মাধ্যমে, সার্ভিসে ব্যর্থতা কমানো যায় এবং সিস্টেমের পারফরম্যান্স উন্নত হয়।
Hystrix হলো Netflix দ্বারা তৈরি একটি লাইব্রেরি যা ফল্ট টলারেন্স এবং ডিস্ট্রিবিউটেড সিস্টেমের স্থিতিশীলতা নিশ্চিত করার জন্য ব্যবহৃত হয়। এটি একটি Circuit Breaker প্যাটার্ন বাস্তবায়ন করে, যা সার্ভিস কলের সময় সমস্যা বা বিলম্ব হলে সিস্টেমকে সুরক্ষিত রাখে। Hystrix মূলত মাইক্রোসার্ভিস আর্কিটেকচারে ব্যবহৃত হয় যেখানে একাধিক সার্ভিস একে অপরের উপর নির্ভরশীল, এবং একটি সার্ভিসের ব্যর্থতা পুরো সিস্টেমকে প্রভাবিত করতে পারে।
Hystrix এর মূল বৈশিষ্ট্যসমূহ:
- Circuit Breaker প্যাটার্ন:
- সার্ভিস কল সফল হলে, সিস্টেম কাজ করতে থাকে। কিন্তু যদি একটি সার্ভিসে সমস্যা হয় (যেমন টাইমআউট, ব্যর্থতা, ইত্যাদি), তাহলে Hystrix স্বয়ংক্রিয়ভাবে Circuit Breaker ট্রিগার করে এবং সিস্টেমকে আরো ব্যর্থতা থেকে রক্ষা করে। এর মাধ্যমে সিস্টেমের অন্যান্য অংশে প্রভাব পড়বে না।
- Fallback Method:
- যখন সার্ভিস কল ব্যর্থ হয়, তখন fallback method ব্যবহার করা হয়, যা পূর্বনির্ধারিত একটি রেসপন্স প্রদান করে, যাতে ব্যবহারকারীকে সেবা প্রদান করা যায়, যদিও মূল সার্ভিসটি কাজ করছে না।
- Time-out & Bulkhead Isolation:
- সার্ভিস কলের জন্য একটি নির্দিষ্ট সময়সীমা নির্ধারণ করা যায়, যাতে কোন সার্ভিস কল স্থায়ীভাবে ফ্রিজ হয়ে না থাকে। এছাড়া, Bulkhead প্যাটার্ন ব্যবহার করে একাধিক সার্ভিসের মধ্যে সম্পদের সঠিক ব্যবহার নিশ্চিত করা যায়।
- Monitoring & Metrics:
- Hystrix প্রতিটি সার্ভিস কলের পারফরম্যান্স ট্র্যাক করে এবং একটি সার্ভিসের স্ট্যাটাস দেখানোর জন্য বিভিন্ন মেট্রিক্স প্রদান করে।
Hystrix এর প্রয়োজনীয়তা:
- ফল্ট টলারেন্স এবং সিস্টেম রিলায়েবিলিটি:
- মাইক্রোসার্ভিস আর্কিটেকচারে একাধিক সার্ভিস একে অপরের ওপর নির্ভরশীল থাকে। একটি সার্ভিস ব্যর্থ হলে পুরো সিস্টেমে সমস্যা তৈরি হতে পারে। Hystrix সার্ভিসের মধ্যে fault tolerance যোগ করে এবং সার্ভিস ব্যর্থ হলে সিস্টেমকে সচল রাখে।
- Circuit Breaker প্যাটার্ন:
- Circuit Breaker প্যাটার্ন এমনভাবে কাজ করে যে যদি কোনো সার্ভিস একাধিক বার ব্যর্থ হয়, তবে পরবর্তী কিছু সময়ের জন্য সেই সার্ভিসের সাথে নতুন রিকোয়েস্ট প্রেরণ বন্ধ হয়ে যায়, যাতে সমস্যা বৃদ্ধি না পায়। সিস্টেম স্বয়ংক্রিয়ভাবে fallback পদ্ধতির মাধ্যমে রেসপন্স প্রদান করে, যাতে অন্যান্য সার্ভিস বা ব্যবহারকারীরা বাধাহীনভাবে কাজ করতে পারে।
- সহজ সার্ভিস ইন্টিগ্রেশন এবং রিলায়েবল কমিউনিকেশন:
- একাধিক সার্ভিসের মধ্যে কমিউনিকেশন করতে গেলে, সমস্যা হতে পারে সার্ভিসের টাইমআউট বা ব্যর্থতা নিয়ে। Hystrix সার্ভিসের মধ্যে আরও রিলায়েবল কমিউনিকেশন নিশ্চিত করতে সাহায্য করে।
- পারফরম্যান্স মনিটরিং:
- Hystrix সার্ভিসের প্রতিটি কল ট্র্যাক করে, যার মাধ্যমে ডেভেলপাররা সিস্টেমের স্বাস্থ্য এবং পারফরম্যান্স মনিটর করতে পারে। এটি বিভিন্ন মেট্রিক্স যেমন সার্ভিস কলের সফলতা, ব্যর্থতা, টাইমআউট ইত্যাদি প্রদান করে।
- প্রতিক্রিয়া সময় কমানো (Latency Reduction):
- যখন সার্ভিস কল দ্রুত সম্পন্ন হয় না, তখন fallback পদ্ধতি ব্যবহার করে সার্ভিসের প্রতিক্রিয়া সময় কমানো যায় এবং ব্যবহারকারীকে দ্রুত সেবা প্রদান করা যায়।
Hystrix ব্যবহার করার উদাহরণ
1. Maven Dependency:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
2. Hystrix Command এর ব্যবহার:
import com.netflix.hystrix.HystrixCommand;
import com.netflix.hystrix.HystrixCommandGroupKey;
public class MyHystrixCommand extends HystrixCommand<String> {
private final String name;
public MyHystrixCommand(String name) {
super(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"));
this.name = name;
}
@Override
protected String run() throws Exception {
// Logic for the normal service call
if (name.equals("fail")) {
throw new RuntimeException("Service call failed");
}
return "Hello " + name;
}
@Override
protected String getFallback() {
// Fallback logic when the service call fails
return "Hello from fallback";
}
}
ব্যাখ্যা:
- run(): এই মেথডে মূল সার্ভিস কল বা লজিক থাকে।
- getFallback(): যখন
run()মেথডে কোনো ব্যর্থতা ঘটে, তখন এটি fallback রেসপন্স প্রদান করে।
3. Hystrix Enablement:
@EnableCircuitBreaker
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@EnableCircuitBreaker অ্যানোটেশনটি Hystrix সক্রিয় করে।
4. Hystrix Command Invocation:
public class MyService {
public String getResponse(String name) {
MyHystrixCommand command = new MyHystrixCommand(name);
return command.execute();
}
}
Hystrix Configuration:
application.properties এ কিছু কনফিগারেশন করা যেতে পারে:
hystrix.command.default.execution.isolation.strategy=THREAD
hystrix.command.default.execution.timeout.enabled=true
hystrix.command.default.execution.timeoutInMilliseconds=1000
এখানে:
execution.isolation.strategy=THREAD: সার্ভিস কলগুলো আলাদা থ্রেডে প্রসেস করা হবে।execution.timeoutInMilliseconds=1000: সার্ভিস কলটির জন্য 1000 মিলিসেকেন্ড টাইমআউট নির্ধারণ করা হবে।
Hystrix এর সুবিধা:
- ফল্ট টলারেন্স বৃদ্ধি:
- সার্ভিসের ব্যর্থতা অন্য সার্ভিসগুলোর ওপর প্রভাব ফেলবে না।
- স্বয়ংক্রিয় ফেইলওভার:
- যখন একটি সার্ভিস কল ব্যর্থ হয়, তখন একটি নির্ধারিত ফ্যালব্যাক মেথড চালু হয়, যা ব্যবহারকারীকে জরুরি সেবা প্রদান করে।
- ডিস্ট্রিবিউটেড সিস্টেমের স্থিতিশীলতা:
- সার্ভিসের ব্যর্থতা সামলাতে গিয়ে পুরো সিস্টেমে কোনো নেতিবাচক প্রভাব ফেলবে না।
- মেট্রিক্স এবং মনিটরিং:
- সার্ভিসের সকল কলের জন্য মেট্রিক্স সংগ্রহ করা যায় এবং সিস্টেমের স্বাস্থ্য সম্পর্কে ইনসাইট পাওয়া যায়।
উপসংহার:
Hystrix একটি অত্যন্ত গুরুত্বপূর্ণ লাইব্রেরি, যা মাইক্রোসার্ভিস আর্কিটেকচারের জন্য সার্ভিসের মধ্যে fault tolerance এবং circuit breaker প্যাটার্ন বাস্তবায়ন করে। এটি সিস্টেমের স্থিতিশীলতা বজায় রাখতে সাহায্য করে এবং একাধিক সার্ভিসের মধ্যে কমিউনিকেশনকে নিরাপদ এবং নির্ভরযোগ্য করে তোলে। Hystrix-এর মাধ্যমে সিস্টেমের পারফরম্যান্স এবং লেটেন্সি অপ্টিমাইজ করা সম্ভব হয়, এবং সার্ভিস ব্যর্থ হলে সিস্টেমে অন্যান্য সার্ভিসের কাজ ব্যাহত না হওয়ার ব্যবস্থা করা হয়।
Circuit Breaker প্যাটার্ন একটি ডিজাইন প্যাটার্ন যা সিস্টেমের ফেইলিউর এবং নির্ভরশীল সার্ভিসের ব্যর্থতা থেকে মূল সিস্টেমকে রক্ষা করতে ব্যবহৃত হয়। এটি একটি সুরক্ষা ব্যবস্থা যা নির্ধারণ করে, যখন একটি সার্ভিস বা ডিপেন্ডেন্সি অনেক বার ব্যর্থ হয়, তখন তা কার্যক্ষম না হয়ে যায় এবং সিস্টেমটি বাকি অংশে কার্যক্ষম থাকতে থাকে।
Circuit Breaker মূলত একটি সিস্টেমের মধ্যে সার্ভিসের ব্যর্থতা বা অবস্থা পর্যবেক্ষণ করে এবং কিছু নির্দিষ্ট সময়ের জন্য সেই সার্ভিসের সাথে যোগাযোগ বন্ধ করে দেয়। এটি নির্ভরশীল সার্ভিসের ব্যর্থতা প্রভাবিত না হওয়া নিশ্চিত করে, যার ফলে মূল সিস্টেমটি সার্ভিস ব্যর্থতার কারণে বন্ধ বা ধীরগতির হয়ে পড়বে না।
Circuit Breaker প্যাটার্ন-এর মূল ধারণা
- Closed State (বন্ধ অবস্থা):
- সার্ভিসটি স্বাভাবিকভাবে কাজ করছে এবং সকল রিকোয়েস্ট ঠিকমতো চলছে। এই সময়ে সিস্টেম সার্ভিসকে কল করে।
- Open State (খোলা অবস্থা):
- সার্ভিসটি একাধিক ব্যর্থতার কারণে "খোলা" অবস্থায় চলে আসে এবং নতুন রিকোয়েস্টগুলো ব্লক করা হয়। সার্ভিস পুনরায় চালু হওয়ার জন্য কিছু সময় বা কন্ডিশন পূর্ণ হতে হতে "Closed" অবস্থায় ফিরে আসে।
- Half-Open State (আংশিক খোলা অবস্থা):
- কিছু নির্দিষ্ট সময় পরে সার্ভিসটি আবার পরীক্ষা করা হয়। যদি সফলভাবে কাজ করে, তাহলে সার্ভিসটি আবার "Closed" অবস্থায় ফিরে আসে। তবে ব্যর্থ হলে আবার "Open" অবস্থায় চলে যাবে।
Circuit Breaker একটি মূল প্যাটার্ন হিসেবে ব্যর্থ সার্ভিস থেকে সিস্টেমের আরেকটি অংশকে রক্ষা করতে সাহায্য করে।
Hystrix এর মাধ্যমে Circuit Breaker বাস্তবায়ন
Hystrix হল Netflix-এর তৈরি একটি সার্কিট ব্রেকার লাইব্রেরি যা Spring Cloud-এর সঙ্গে ইন্টিগ্রেটেড হয়ে মাইক্রোসার্ভিস আর্কিটেকচারে ব্যবহৃত হয়। এটি মাইক্রোসার্ভিসগুলির মধ্যে নির্ভরশীলতার সমস্যা, ব্যর্থতা এবং অপ্রত্যাশিত সার্ভিস ডাউনটাইমের সময় সিস্টেমের স্থিতিশীলতা নিশ্চিত করে। Hystrix সার্ভিসের ফল্ট টলারেন্স ম্যানেজ করে এবং একটি সার্ভিসের ব্যর্থতার কারণে পুরো সিস্টেমের কার্যক্রম থেমে যাওয়া থেকে রক্ষা করে।
Hystrix এর বৈশিষ্ট্য:
- Circuit Breaker Pattern: সার্ভিসের ব্যর্থতার উপর ভিত্তি করে সার্কিট ব্রেকার চালু বা বন্ধ করে।
- Fallback Mechanism: সার্ভিসে সমস্যা হলে একটি ফলোব্যাক রেসপন্স প্রদান করে।
- Request Caching: একাধিক সার্ভিস কলের জন্য ক্যাশিং সমর্থন করে।
- Bulkhead Isolation: সার্ভিসগুলির মধ্যে সীমিত রিসোর্স ভাগ করে দেয়, যাতে একটি ব্যর্থ সার্ভিস পুরো সিস্টেমকে প্রভাবিত না করে।
Hystrix এর সাথে Circuit Breaker বাস্তবায়ন
Step 1: Maven ডিপেনডেন্সি যোগ করা
pom.xml-এ Hystrix লাইব্রেরি যোগ করুন।
<dependencies>
<!-- Spring Boot Starter Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Cloud Starter Hystrix (Circuit Breaker) -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<!-- Spring Boot Starter Actuator for Monitoring -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
Step 2: @EnableCircuitBreaker এনোটেশন ব্যবহার করা
Spring Boot অ্যাপ্লিকেশনে @EnableCircuitBreaker এনোটেশন যোগ করুন যাতে Hystrix এর Circuit Breaker কার্যকর হয়।
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
@SpringBootApplication
@EnableCircuitBreaker // Enable Circuit Breaker for the application
public class HystrixExampleApplication {
public static void main(String[] args) {
SpringApplication.run(HystrixExampleApplication.class, args);
}
}
Step 3: Hystrix Command তৈরি করা
Hystrix এর মাধ্যমে সার্ভিস কলের জন্য Circuit Breaker তৈরি করতে, @HystrixCommand ব্যবহার করুন। এই অ্যানোটেশনটি সার্ভিস কলকে র্যাপ করে, এবং সার্ভিস ব্যর্থ হলে একটি ফলোব্যাক মেথড কল করবে।
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.stereotype.Service;
@Service
public class MyService {
// Normal service method with Circuit Breaker
@HystrixCommand(fallbackMethod = "fallbackMethod") // Fallback method when main method fails
public String callExternalService() {
// Imagine this is an HTTP call to an external service
if (Math.random() > 0.5) {
throw new RuntimeException("External service failure!");
}
return "External service response";
}
// Fallback method to handle failure
public String fallbackMethod(Throwable t) {
return "Fallback response due to failure: " + t.getMessage();
}
}
Step 4: Controller তৈরি করা
এখন এই সার্ভিসে তৈরি করা HystrixCommand কে একটি REST API এর মাধ্যমে পরীক্ষা করা যায়।
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyController {
private final MyService myService;
public MyController(MyService myService) {
this.myService = myService;
}
@GetMapping("/call-service")
public String callService() {
return myService.callExternalService();
}
}
Step 5: application.properties কনফিগারেশন
Hystrix এর কনফিগারেশন এবং সার্ভিস রেজিস্ট্রেশন করার জন্য application.properties ফাইলে কিছু সেটিংস যোগ করুন।
# Enable Hystrix Metrics Stream
hystrix.stream.enabled=true
# Hystrix Timeout Configuration (e.g. for fallback)
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=1000
Hystrix Dashboard
Hystrix Dashboard একটি ইউজার ইন্টারফেস সরবরাহ করে যা সার্কিট ব্রেকারের অবস্থা ট্র্যাক করে। এটি সার্ভিসের স্বাস্থ্য, সার্কিট ব্রেকারের স্টেট এবং মেট্রিক্স প্রদর্শন করে।
Hystrix Dashboard ব্যবহার করার জন্য:
spring-boot-starter-actuatorডিপেনডেন্সি যোগ করুন।@EnableHystrixDashboardএনোটেশন ব্যবহার করুন।application.propertiesফাইলে মেট্রিক্স স্ট্রিম URL কনফিগার করুন।
import org.springframework.boot.actuate.hystrix.dashboard.EnableHystrixDashboard;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableHystrixDashboard // Enable Hystrix Dashboard
public class HystrixDashboardApplication {
public static void main(String[] args) {
SpringApplication.run(HystrixDashboardApplication.class, args);
}
}
উপসংহার
- Circuit Breaker প্যাটার্ন মাইক্রোসার্ভিস আর্কিটেকচারে ব্যর্থ সার্ভিস থেকে পুরো সিস্টেমকে রক্ষা করতে ব্যবহৃত হয়।
- Hystrix সার্ভিসগুলোর ফল্ট টলারেন্স এবং আস্থারযোগ্যতা বাড়াতে ব্যবহৃত হয়। এটি সার্ভিসে ব্যর্থতার সময় একটি Fallback Method কল করে এবং সার্ভিসে সমস্যা থাকলেও পুরো সিস্টেম বন্ধ হওয়ার ঝুঁকি কমায়।
- Spring Cloud Hystrix ব্যবহার করে মাইক্রোসার্ভিসে সার্কিট ব্রেকার ইমপ্লিমেন্ট করা যায় যা সিস্টেমের স্ট্যাবিলিটি নিশ্চিত করে।
Spring Cloud Hystrix Dashboard এবং Monitoring হল Spring Cloud এর অত্যন্ত গুরুত্বপূর্ণ ফিচার যা মাইক্রোসার্ভিস আর্কিটেকচারে সার্ভিসগুলির স্বাস্থ্য এবং কর্মক্ষমতা পর্যবেক্ষণ করার জন্য ব্যবহৃত হয়। Hystrix একটি circuit breaker প্যাটার্ন ব্যবহার করে সার্ভিস ব্যর্থতা ম্যানেজমেন্টের জন্য ডিজাইন করা হয়েছে, যা সার্ভিসের দুর্বলতা বা ব্যর্থতা গোপন করার মাধ্যমে সিস্টেমের অবিচ্ছিন্ন কার্যকারিতা নিশ্চিত করে। Hystrix Dashboard এবং Monitoring এই ব্যর্থতা এবং সার্ভিসগুলির অবস্থা রিয়েল-টাইমে পর্যবেক্ষণ করার সুযোগ দেয়।
১. Hystrix Overview
Hystrix হল Netflix এর একটি লাইব্রেরি যা circuit breaker প্যাটার্নটি প্রয়োগ করে। যখন একটি সার্ভিস অন্য সার্ভিসের উপর নির্ভরশীল থাকে এবং সেই সার্ভিসের মধ্যে কোনো সমস্যা বা দেরি হয়, তখন হাইস্ট্রিক্স সিস্টেমকে অপ্রত্যাশিত ব্যর্থতা থেকে রক্ষা করতে circuit breaker হিসেবে কাজ করে। যখন সার্ভিসের অবস্থা খারাপ হয়ে যায়, তখন Hystrix ফোলব্যাক পদ্ধতি চালু করে, যেমন অন্য কোনো সার্ভিস বা কনফিগারড পদ্ধতি ব্যবহৃত হয়।
২. Spring Cloud Hystrix Dashboard
Hystrix Dashboard হল একটি সিম্পল UI যা সার্ভিসের স্বাস্থ্য, ট্রাফিক, এবং সার্ভিসের ব্যর্থতার পরিসংখ্যান (metrics) রিয়েল-টাইমে প্রদর্শন করে। এটি সার্ভিসের সফল এবং ব্যর্থ রিকোয়েস্টের সংখ্যা, সার্ভিসের latency (উত্তর প্রদানের সময়), সার্ভিসের অবস্থা ইত্যাদি দেখায়।
২.১ Hystrix Dashboard কনফিগারেশন
Hystrix Dashboard ব্যবহার করতে, আপনাকে প্রথমে Hystrix Stream Servlet কনফিগার করতে হবে যা Hystrix সার্ভিসের স্বাস্থ্য এবং মেট্রিক্স স্ট্রিম আউটপুট করতে সাহায্য করবে।
১. Spring Boot অ্যাপ্লিকেশন সেটআপ
- Maven ডিপেনডেন্সি: প্রথমে
spring-cloud-starter-hystrix-dashboardএবংspring-cloud-starter-hystrixডিপেনডেন্সি আপনারpom.xmlফাইলে যুক্ত করুন।
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
@EnableHystrixDashboardএনোটেশন: আপনার Spring Boot অ্যাপ্লিকেশনে Hystrix Dashboard সক্রিয় করতে,@EnableHystrixDashboardএনোটেশন ব্যবহার করুন।
@SpringBootApplication
@EnableHystrixDashboard
public class HystrixDashboardApplication {
public static void main(String[] args) {
SpringApplication.run(HystrixDashboardApplication.class, args);
}
}
application.propertiesকনফিগারেশন: Hystrix স্ট্রিম সাপোর্টের জন্য আপনাকে স্ট্রিম সার্ভিস কনফিগার করতে হবে:
hystrix.stream.url=http://localhost:8080/actuator/hystrix.stream
এখানে hystrix.stream.url হল Hystrix Stream-এর URL যা আপনার সার্ভিসের মেট্রিক্স সংগ্রহ করবে।
২.২ Hystrix Dashboard ব্যবহার
আপনি এখন Hystrix Dashboard অ্যাক্সেস করতে পারেন ব্রাউজারে:
http://localhost:8080/hystrix
এখানে আপনি Hystrix Stream URL হিসেবে /actuator/hystrix.stream নির্দিষ্ট করতে পারবেন, যেখানে actuator হল Spring Boot অ্যাপ্লিকেশনে একটি হেলথ চেক এবং মেট্রিক্স প্রদানকারী এন্ডপয়েন্ট।
আপনি এই UI-এর মাধ্যমে বিভিন্ন সার্ভিসের স্বাস্থ্য এবং কার্যকারিতা রিয়েল-টাইমে দেখতে পাবেন। Dashboard আপনাকে সার্ভিসের circuit breaker পরিসংখ্যান দেখাবে যেমন:
- Requests (সর্বমোট রিকোয়েস্ট)
- Failure rate (ব্যর্থতার হার)
- Latency (উত্তর দেওয়ার সময়)
- Success rate (সফল রিকোয়েস্টের হার)
- Active requests (একই সময়ে চলমান রিকোয়েস্ট)
৩. Hystrix Monitoring
Hystrix Monitoring আপনাকে আপনার মাইক্রোসার্ভিসের কর্মক্ষমতা ট্র্যাক করতে এবং সার্ভিসের স্ট্যাটাস সম্পর্কে নিশ্চিত হতে সাহায্য করে। এটি Hystrix Stream ব্যবহার করে মেট্রিক্স সংগ্রহ করে, যা Hystrix Dashboard-এ রিয়েল-টাইমে প্রদর্শিত হয়। তবে, আপনি চাইলে Prometheus এবং Grafana এর মতো আরও শক্তিশালী টুলসও ব্যবহার করতে পারেন যাতে সার্ভিস মনিটরিং এবং গ্রাফ তৈরি করা যায়।
৩.১ Hystrix Stream Configuration
Hystrix Stream হল একটি HTTP স্ট্রিম যা সার্ভিসের সমস্ত মেট্রিক্স এবং তথ্য সংগ্রহ করে। এটি Spring Boot Actuator-এর মাধ্যমে এক্সপোজ করা হয়। সার্ভিসের /actuator/hystrix.stream এন্ডপয়েন্টে পৌঁছানোর মাধ্যমে স্ট্রিম ডেটা পাওয়া যায়।
application.properties-এ Hystrix Stream URL কনফিগার করা:
management.endpoints.web.exposure.include=health,info,hystrix.stream
- Hystrix Stream Output: আপনি /actuator/hystrix.stream URL এ গিয়ে সকল মেট্রিক্স দেখতে পারবেন। এর মধ্যে সার্ভিসের circuit breaker স্ট্যাটাস এবং সফল বা ব্যর্থ রিকোয়েস্টের তথ্য থাকবে।
৩.২ Prometheus এবং Grafana Integration
Prometheus এবং Grafana এর সাথে ইন্টিগ্রেট করে আপনি আপনার সার্ভিসের real-time monitoring এবং historical metrics ট্র্যাক করতে পারবেন।
- Prometheus থেকে Hystrix Stream সংগ্রহ করা।
- Grafana ব্যবহার করে সেই ডেটা গ্রাফ এবং চার্টে ভিজ্যুয়ালাইজ করা।
এটি উচ্চতর মনিটরিং ক্যাপাবিলিটি এবং ডিটেইলড মেট্রিক্স তৈরি করতে সহায়ক।
৪. Spring Cloud Sleuth এবং Hystrix Integration
আপনি Spring Cloud Sleuth ব্যবহার করে আপনার Hystrix সিস্টেমের মধ্যে distributed tracing যোগ করতে পারেন। এটি আপনাকে সার্ভিসগুলোর মধ্যে রিকোয়েস্ট ট্র্যাকিং এবং যে কোথাও সমস্যা ঘটছে সেটি দ্রুত চিহ্নিত করতে সাহায্য করে।
উপসংহার
Hystrix Dashboard এবং Monitoring Spring Cloud মাইক্রোসার্ভিস আর্কিটেকচারে অত্যন্ত গুরুত্বপূর্ণ। এগুলি সার্ভিসগুলোর স্বাস্থ্য এবং কর্মক্ষমতা রিয়েল-টাইমে পর্যবেক্ষণ করতে সাহায্য করে, যাতে দ্রুত সমস্যা চিহ্নিত করা এবং তা সমাধান করা সম্ভব হয়। Hystrix এর মাধ্যমে সার্ভিসের ফল্ট টলারেন্স পরিচালনা করা এবং Monitoring টুলস ব্যবহার করে সার্ভিসের কার্যকারিতা এবং স্থায়িত্ব নিশ্চিত করা সম্ভব।
Hystrix হলো Netflix এর একটি লাইব্রেরি যা সার্কিট ব্রেকার প্যাটার্নের মাধ্যমে সার্ভিস ফেইল হওয়া থেকে সিস্টেমকে রক্ষা করে এবং সিস্টেমের স্থিতিশীলতা নিশ্চিত করে। এটি মাইক্রোসার্ভিস আর্কিটেকচারে বিশেষভাবে কার্যকর, যেখানে এক সার্ভিসের ব্যর্থতা পুরো সিস্টেমের উপর প্রভাব ফেলতে পারে। Hystrix সার্ভিস কলগুলির মধ্যে একটি ফেইল সিচুয়েশন মোকাবেলা করার জন্য "Fallback" পদ্ধতি ব্যবহার করে।
Hystrix Integration: একটি সাধারণ উদাহরণ
এখানে আমরা একটি উদাহরণ দেখব, যেখানে Hystrix সার্কিট ব্রেকারের মাধ্যমে একটি সার্ভিস কলের জন্য ফেইল-সেফ মেকানিজম সেটআপ করা হয়েছে।
Step 1: প্রয়োজনীয় ডিপেনডেন্সি যোগ করা
Hystrix এবং Spring Cloud Starter ব্যবহার করতে, আপনাকে আপনার pom.xml ফাইলে প্রয়োজনীয় ডিপেনডেন্সি যোগ করতে হবে।
<dependencies>
<!-- Spring Boot Starter Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Cloud Starter Hystrix -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<!-- Spring Cloud Starter Eureka Client (Optional, if you're using Eureka for service discovery) -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
Step 2: Hystrix সার্কিট ব্রেকার সেটআপ
@EnableCircuitBreaker অ্যানোটেশন ব্যবহার করে সার্কিট ব্রেকার সক্রিয় করা হয়। এছাড়াও, @HystrixCommand অ্যানোটেশন ব্যবহার করে নির্দিষ্ট মেথডের জন্য সার্কিট ব্রেকার কার্যকর করা হয়। এই অ্যানোটেশনটি একটি ফেইলড সার্ভিস কলের জন্য ফ্যালব্যাক মেথড কনফিগার করতে সহায়ক।
Hystrix সার্ভিসের উদাহরণ
Service Class with Hystrix Command
প্রথমে একটি সার্ভিস তৈরি করুন, যেখানে একটি সাধারণ সার্ভিস কল থাকবে যা সফল অথবা ব্যর্থ হতে পারে। এরপর সেই মেথডে HystrixCommand ব্যবহার করা হবে।
import com.netflix.hystrix.HystrixCommand; import com.netflix.hystrix.HystrixCommandGroupKey; import org.springframework.stereotype.Service; @Service public class MyService { // Default method that will fail and activate the circuit breaker @HystrixCommand(fallbackMethod = "fallbackMethod") public String callRemoteService() { // Simulating a remote service failure if (Math.random() > 0.5) { throw new RuntimeException("Service failure"); } return "Service success"; } // Fallback method that gets called if the service fails public String fallbackMethod() { return "Fallback response: Service is unavailable"; } }Enable Circuit Breaker in Spring Boot Application
সার্ভিসে সার্কিট ব্রেকার সক্রিয় করতে @EnableCircuitBreaker অ্যানোটেশন ব্যবহার করুন।
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; @SpringBootApplication @EnableCircuitBreaker public class HystrixApplication { public static void main(String[] args) { SpringApplication.run(HystrixApplication.class, args); } }Controller to Call the Service
একটি REST Controller তৈরি করুন, যা
MyServiceথেকে সার্ভিস কল করবে। যদি সার্ভিস ফেইল করে, তাহলে এটি fallback মেথডের মাধ্যমে ডেটা ফিরিয়ে দেবে।import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class MyController { @Autowired private MyService myService; @GetMapping("/call-service") public String callService() { return myService.callRemoteService(); } }
Step 3: Configuration (Optional)
যদি আপনি সার্ভিস রেজিস্ট্রি ও ডিসকভারি ব্যবহার করতে চান, যেমন Eureka, তাহলে application.properties ফাইলে নিম্নলিখিত কনফিগারেশন যোগ করুন:
# Eureka server URL (Optional, for service discovery)
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
# Enable Hystrix dashboard for monitoring (Optional)
hystrix.stream.enabled=true
Step 4: Running the Application
- Run the Hystrix application: প্রথমে Spring Boot অ্যাপ্লিকেশনটি চালু করুন। আপনার সার্ভিস চালু হবে এবং আপনি
/call-serviceURL-এ HTTP অনুরোধ পাঠালে এটিcallRemoteService()মেথডে যাবে। - Testing Circuit Breaker: প্রথমে সার্ভিসটি সফলভাবে কাজ করবে। পরে যখন এটি ব্যর্থ হবে, তখন সার্কিট ব্রেকার সক্রিয় হবে এবং ফ্যালব্যাক মেথডের মাধ্যমে "Fallback response: Service is unavailable" মেসেজটি দেখাবে।
Hystrix Dashboard
Hystrix-dashboard ব্যবহার করে সার্ভিসের স্বাস্থ্য পরীক্ষা এবং সার্কিট ব্রেকারের স্ট্যাটাস মনিটর করা যেতে পারে। এর মাধ্যমে আপনি সার্ভিস কলের স্ট্যাটাস এবং সার্কিট ব্রেকারের কার্যকারিতা দেখতে পারেন।
Dependency Add for Hystrix Dashboard:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> </dependency>Enable Hystrix Dashboard:
@EnableHystrixDashboardঅ্যানোটেশন ব্যবহার করুন:import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @EnableHystrixDashboard public class HystrixDashboardApplication { public static void main(String[] args) { SpringApplication.run(HystrixDashboardApplication.class, args); } }Access Hystrix Dashboard: ড্যাশবোর্ডটি দেখতে, আপনার ব্রাউজারে
http://localhost:8080/hystrixURL-এ যান।এখানে আপনি সার্ভিসের সার্কিট ব্রেকার স্ট্যাটাস দেখতে পারবেন, এবং
http://localhost:8080/actuator/hystrix.streamথেকে স্ট্রিম দেখতে পারবেন।
Step 5: Fallback with Hystrix
আপনি যখন সার্ভিসে অতিরিক্ত ফিচার যোগ করতে চান, যেমন retry logic বা custom fallback ব্যবস্থা, আপনি Hystrix-এর ফিচার ব্যবহার করতে পারেন:
@HystrixCommand(fallbackMethod = "defaultMethod", commandProperties = {
@HystrixProperty(name = "execution.isolation.strategy", value = "SEMAPHORE"),
@HystrixProperty(name = "execution.timeout.enabled", value = "false")})
public String riskyMethod() {
// Your logic here that may fail
return "Success";
}
public String defaultMethod() {
return "Fallback response for risky method";
}
Conclusion
Hystrix সার্কিট ব্রেকার প্যাটার্ন ব্যবহার করে মাইক্রোসার্ভিস আর্কিটেকচারে ব্যর্থতার প্রতিরোধে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। এটি সার্ভিস কলগুলোর মধ্যে ব্যর্থতা ঘটে গেলে ক্লায়েন্টের কাছে একটি fallback মেকানিজম সরবরাহ করে, যাতে পুরো সিস্টেমের স্থিতিশীলতা বজায় থাকে। Hystrix ব্যবহারের মাধ্যমে, আপনি সার্ভিস কলের মধ্যে সমস্যা হলেও আপনার অ্যাপ্লিকেশনটির কার্যক্ষমতা বজায় রাখতে পারেন।
Read more